{
  "bundles": [
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-audit-core",
      "artifactVersion": "2025.27.34",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.admin.center",
          "org.nuxeo.binary.metadata",
          "org.nuxeo.directory.mongodb",
          "org.nuxeo.dmk-adaptor",
          "org.nuxeo.ecm.actions",
          "org.nuxeo.ecm.audit.io",
          "org.nuxeo.ecm.default.config",
          "org.nuxeo.ecm.jwt",
          "org.nuxeo.ecm.permissions",
          "org.nuxeo.ecm.platform",
          "org.nuxeo.ecm.platform.api",
          "org.nuxeo.ecm.platform.audio.core",
          "org.nuxeo.ecm.platform.audit",
          "org.nuxeo.ecm.platform.collections.core",
          "org.nuxeo.ecm.platform.commandline.executor",
          "org.nuxeo.ecm.platform.content.template",
          "org.nuxeo.ecm.platform.convert",
          "org.nuxeo.ecm.platform.csv.export",
          "org.nuxeo.ecm.platform.dublincore",
          "org.nuxeo.ecm.platform.filemanager",
          "org.nuxeo.ecm.platform.htmlsanitizer",
          "org.nuxeo.ecm.platform.mail",
          "org.nuxeo.ecm.platform.notification",
          "org.nuxeo.ecm.platform.oauth",
          "org.nuxeo.ecm.platform.oauth1",
          "org.nuxeo.ecm.platform.pdf",
          "org.nuxeo.ecm.platform.preview",
          "org.nuxeo.ecm.platform.publisher",
          "org.nuxeo.ecm.platform.query.api",
          "org.nuxeo.ecm.platform.rendering",
          "org.nuxeo.ecm.platform.search.core",
          "org.nuxeo.ecm.platform.suggestbox.core",
          "org.nuxeo.ecm.platform.tag",
          "org.nuxeo.ecm.platform.thumbnail",
          "org.nuxeo.ecm.platform.types",
          "org.nuxeo.ecm.platform.url",
          "org.nuxeo.ecm.platform.usermanager",
          "org.nuxeo.ecm.platform.userworkspace",
          "org.nuxeo.ecm.quota",
          "org.nuxeo.importer.stream",
          "org.nuxeo.mail",
          "org.nuxeo.usermapper"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform",
        "id": "grp:org.nuxeo.ecm.platform",
        "name": "org.nuxeo.ecm.platform",
        "parentIds": [],
        "readmes": [
          {
            "blobProviderId": "default",
            "content": "# Nuxeo Platform Importer\n\n## About Nuxeo Platform Importer\n\nThe file importer comes as a Java library (with nuxeo runtime service) and a sample JAX-RS interface to launch, monitor and abort import jobs.\nThis project is an on-going project, supported by Nuxeo\n\n## Building\n### How to Build Nuxeo Platform Importer\nBuild the Nuxeo Platform Importer with Maven:\n```$ mvn install -Dmaven.test.skip=true```\n\n## Deploying\nNuxeo Platform Importer is available as two package add-ons [from the Nuxeo Marketplace]\nhttps://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-platform-importer\nhttps://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-scan-importer\n\n## Resources\n### Documentation\nThe documentation for Nuxeo Platform Importer is available in our Documentation Center: http://doc.nuxeo.com/x/gYBVAQ\n\n### Reporting Issues\nYou can follow the developments in the Nuxeo Platform project of our JIRA bug tracker, which includes a Nuxeo Platform Importer component:\nhttps://jira.nuxeo.com/browse/NXP/component/10621\n\nYou can report issues on: http://answers.nuxeo.com/\n\n## About Nuxeo\nNuxeo dramatically improves how content-based applications are built, managed and deployed, making customers more agile, innovative and successful. Nuxeo provides a next generation, enterprise ready platform for building traditional and cutting-edge content oriented applications. Combining a powerful application development environment with SaaS-based tools and a modular architecture, the Nuxeo Platform and Products provide clear business value to some of the most recognizable brands including Verizon, Electronic Arts, Sharp, FICO, the U.S. Navy, and Boeing. Nuxeo is headquartered in New York and Paris. More information is available at www.nuxeo.com.\n",
            "digest": "83bb2a4c6415c9f07db3ab17fa99510c",
            "encoding": "UTF-8",
            "length": 1753,
            "mimeType": "text/plain",
            "name": "README.md"
          }
        ],
        "version": "2025.27"
      },
      "bundleId": "org.nuxeo.ecm.platform.audit",
      "components": [
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.audit.service.AuditComponent--backendFactory",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.service.AuditComponent.defaultContrib/Contributions/org.nuxeo.audit.service.AuditComponent.defaultContrib--backendFactory",
              "id": "org.nuxeo.audit.service.AuditComponent.defaultContrib--backendFactory",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.audit.service.AuditComponent",
                "name": "org.nuxeo.audit.service.AuditComponent",
                "type": "service"
              },
              "version": "2025.27.34",
              "xml": "<extension point=\"backendFactory\" target=\"org.nuxeo.audit.service.AuditComponent\">\n    <backend factory=\"org.nuxeo.audit.mem.MemAuditBackendFactory\" name=\"default\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": "\n      Those default auditable events match Nuxeo core base events.\n      <p/>\n\n      If you are sending new Nuxeo core events and want them audited, this is the place to declare them NXAudit side.\n    \n",
              "documentationHtml": "<p>\nThose default auditable events match Nuxeo core base events.\n</p><p>\nIf you are sending new Nuxeo core events and want them audited, this is the place to declare them NXAudit side.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.audit.service.AuditComponent--routes",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.service.AuditComponent.defaultContrib/Contributions/org.nuxeo.audit.service.AuditComponent.defaultContrib--routes",
              "id": "org.nuxeo.audit.service.AuditComponent.defaultContrib--routes",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.audit.service.AuditComponent",
                "name": "org.nuxeo.audit.service.AuditComponent",
                "type": "service"
              },
              "version": "2025.27.34",
              "xml": "<extension point=\"routes\" target=\"org.nuxeo.audit.service.AuditComponent\">\n    <documentation>\n      Those default auditable events match Nuxeo core base events.\n      <p/>\n      If you are sending new Nuxeo core events and want them audited, this is the place to declare them NXAudit side.\n    </documentation>\n\n    <route name=\"default\">\n      <backend name=\"default\"/>\n      <!-- login events -->\n      <event name=\"loginSuccess\"/>\n      <event name=\"loginFailed\"/>\n      <event name=\"logout\"/>\n      <!-- document event -->\n      <event name=\"documentCreated\"/>\n      <event name=\"documentCreatedByCopy\"/>\n      <event name=\"documentDuplicated\"/>\n      <event name=\"documentMoved\"/>\n      <event name=\"documentRemoved\"/>\n      <event name=\"documentModified\"/>\n      <event name=\"documentLocked\"/>\n      <event name=\"documentUnlocked\"/>\n      <event name=\"documentSecurityUpdated\"/>\n      <event name=\"lifecycle_transition_event\"/>\n      <event name=\"documentCheckedIn\"/>\n      <event name=\"proxyRemoved\"/>\n      <event name=\"versionRemoved\"/>\n      <event name=\"documentProxyPublished\"/>\n      <event name=\"sectionContentPublished\"/>\n      <event name=\"documentRestored\"/>\n      <event name=\"download\"/>\n      <event name=\"documentTrashed\"/>\n      <event name=\"documentUntrashed\"/>\n      <event name=\"addedToCollection\"/>\n      <event name=\"removedFromCollection\"/>\n      <!-- blob events -->\n      <event name=\"blobDigestUpdated\"/>\n      <event name=\"blobDigestSkipped\"/>\n      <!-- retention events -->\n      <event name=\"retentionActiveChanged\"/>\n      <event name=\"afterMakeRecord\"/>\n      <event name=\"afterSetRetention\"/>\n      <event name=\"afterExtendRetention\"/>\n      <event name=\"retentionExpired\"/>\n      <event name=\"afterSetLegalHold\"/>\n      <event name=\"afterRemoveLegalHold\"/>\n      <!-- user and group events -->\n      <event name=\"user_created\"/>\n      <event name=\"user_deleted\"/>\n      <event name=\"user_modified\"/>\n      <event name=\"group_created\"/>\n      <event name=\"group_deleted\"/>\n      <event name=\"group_modified\"/>\n      <event name=\"search\"/>\n    </route>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.audit.service.AuditComponent--extendedInfo",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.service.AuditComponent.defaultContrib/Contributions/org.nuxeo.audit.service.AuditComponent.defaultContrib--extendedInfo",
              "id": "org.nuxeo.audit.service.AuditComponent.defaultContrib--extendedInfo",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.audit.service.AuditComponent",
                "name": "org.nuxeo.audit.service.AuditComponent",
                "type": "service"
              },
              "version": "2025.27.34",
              "xml": "<extension point=\"extendedInfo\" target=\"org.nuxeo.audit.service.AuditComponent\">\n    <extendedInfo event=\"blobDigestUpdated\" expression=\"${message.properties.oldKey}\" key=\"oldKey\"/>\n    <extendedInfo event=\"blobDigestUpdated\" expression=\"${message.properties.oldDigest}\" key=\"oldDigest\"/>\n    <extendedInfo event=\"blobDigestUpdated\" expression=\"${message.properties.newKey}\" key=\"newKey\"/>\n    <extendedInfo event=\"blobDigestUpdated\" expression=\"${message.properties.newDigest}\" key=\"newDigest\"/>\n    <extendedInfo event=\"blobDigestSkipped\" expression=\"${message.properties.key}\" key=\"key\"/>\n    <extendedInfo event=\"blobDigestSkipped\" expression=\"${message.properties.blobProviderId}\" key=\"blobProviderId\"/>\n\n    <extendedInfo event=\"retentionActiveChanged\" expression=\"${message.properties.retentionActive}\" key=\"retentionActive\"/>\n\n    <extendedInfo event=\"user_created\" expression=\"${message.properties.id}\" key=\"id\"/>\n    <extendedInfo event=\"user_deleted\" expression=\"${message.properties.id}\" key=\"id\"/>\n    <extendedInfo event=\"user_modified\" expression=\"${message.properties.id}\" key=\"id\"/>\n\n    <extendedInfo event=\"group_created\" expression=\"${message.properties.id}\" key=\"id\"/>\n    <extendedInfo event=\"group_deleted\" expression=\"${message.properties.id}\" key=\"id\"/>\n    <extendedInfo event=\"group_modified\" expression=\"${message.properties.id}\" key=\"id\"/>\n\n    <extendedInfo event=\"search\" expression=\"${message.properties.searchDocumentModelAsJson}\" key=\"searchDocumentModel\"/>\n    <extendedInfo event=\"search\" expression=\"${message.properties.aggregates}\" key=\"aggregates\"/>\n    <extendedInfo event=\"search\" expression=\"${message.properties.aggregatesMatches}\" key=\"aggregatesMatches\"/>\n    <extendedInfo event=\"search\" expression=\"${message.properties.effectiveQuery}\" key=\"effectiveQuery\"/>\n    <extendedInfo event=\"search\" expression=\"${message.properties.pageIndex}\" key=\"pageIndex\"/>\n    <extendedInfo event=\"search\" expression=\"${message.properties.resultsCountInPage}\" key=\"resultsCountInPage\"/>\n    <extendedInfo event=\"search\" expression=\"${message.properties.resultsCount}\" key=\"resultsCount\"/>\n    <extendedInfo event=\"search\" expression=\"${message.properties.pageProviderName}\" key=\"pageProviderName\"/>\n    <extendedInfo event=\"search\" expression=\"${message.properties.queryParams}\" key=\"queryParams\"/>\n    <extendedInfo event=\"search\" expression=\"${message.properties.params}\" key=\"params\"/>\n    <extendedInfo event=\"search\" expression=\"${message.properties.executionTimeMs}\" key=\"executionTimeMs\"/>\n    <extendedInfo event=\"search\" expression=\"${message.properties.searchFields}\" key=\"searchFields\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.service.AuditComponent.defaultContrib",
          "name": "org.nuxeo.audit.service.AuditComponent.defaultContrib",
          "requirements": [],
          "resolutionOrder": 244,
          "services": [],
          "startOrder": 45,
          "version": "2025.27.34",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.audit.service.AuditComponent.defaultContrib\">\n\n  <extension target=\"org.nuxeo.audit.service.AuditComponent\" point=\"backendFactory\">\n    <backend name=\"default\" factory=\"${nuxeo.audit.backend.default.factory:=}\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.audit.service.AuditComponent\" point=\"routes\">\n    <documentation>\n      Those default auditable events match Nuxeo core base events.\n      <p />\n      If you are sending new Nuxeo core events and want them audited, this is the place to declare them NXAudit side.\n    </documentation>\n\n    <route name=\"default\">\n      <backend name=\"default\" />\n      <!-- login events -->\n      <event name=\"loginSuccess\" />\n      <event name=\"loginFailed\" />\n      <event name=\"logout\" />\n      <!-- document event -->\n      <event name=\"documentCreated\" />\n      <event name=\"documentCreatedByCopy\" />\n      <event name=\"documentDuplicated\" />\n      <event name=\"documentMoved\" />\n      <event name=\"documentRemoved\" />\n      <event name=\"documentModified\" />\n      <event name=\"documentLocked\" />\n      <event name=\"documentUnlocked\" />\n      <event name=\"documentSecurityUpdated\" />\n      <event name=\"lifecycle_transition_event\" />\n      <event name=\"documentCheckedIn\" />\n      <event name=\"proxyRemoved\" />\n      <event name=\"versionRemoved\" />\n      <event name=\"documentProxyPublished\" />\n      <event name=\"sectionContentPublished\" />\n      <event name=\"documentRestored\" />\n      <event name=\"download\" />\n      <event name=\"documentTrashed\" />\n      <event name=\"documentUntrashed\" />\n      <event name=\"addedToCollection\" />\n      <event name=\"removedFromCollection\" />\n      <!-- blob events -->\n      <event name=\"blobDigestUpdated\" />\n      <event name=\"blobDigestSkipped\" />\n      <!-- retention events -->\n      <event name=\"retentionActiveChanged\" />\n      <event name=\"afterMakeRecord\" />\n      <event name=\"afterSetRetention\" />\n      <event name=\"afterExtendRetention\" />\n      <event name=\"retentionExpired\" />\n      <event name=\"afterSetLegalHold\" />\n      <event name=\"afterRemoveLegalHold\" />\n      <!-- user and group events -->\n      <event name=\"user_created\" />\n      <event name=\"user_deleted\" />\n      <event name=\"user_modified\" />\n      <event name=\"group_created\" />\n      <event name=\"group_deleted\" />\n      <event name=\"group_modified\" />\n      <event name=\"search\" />\n    </route>\n  </extension>\n\n  <extension target=\"org.nuxeo.audit.service.AuditComponent\" point=\"extendedInfo\">\n    <extendedInfo event=\"blobDigestUpdated\" key=\"oldKey\" expression=\"${message.properties.oldKey}\" />\n    <extendedInfo event=\"blobDigestUpdated\" key=\"oldDigest\" expression=\"${message.properties.oldDigest}\" />\n    <extendedInfo event=\"blobDigestUpdated\" key=\"newKey\" expression=\"${message.properties.newKey}\" />\n    <extendedInfo event=\"blobDigestUpdated\" key=\"newDigest\" expression=\"${message.properties.newDigest}\" />\n    <extendedInfo event=\"blobDigestSkipped\" key=\"key\" expression=\"${message.properties.key}\" />\n    <extendedInfo event=\"blobDigestSkipped\" key=\"blobProviderId\" expression=\"${message.properties.blobProviderId}\" />\n\n    <extendedInfo event=\"retentionActiveChanged\" key=\"retentionActive\" expression=\"${message.properties.retentionActive}\" />\n\n    <extendedInfo event=\"user_created\" key=\"id\" expression=\"${message.properties.id}\" />\n    <extendedInfo event=\"user_deleted\" key=\"id\" expression=\"${message.properties.id}\" />\n    <extendedInfo event=\"user_modified\" key=\"id\" expression=\"${message.properties.id}\" />\n\n    <extendedInfo event=\"group_created\" key=\"id\" expression=\"${message.properties.id}\" />\n    <extendedInfo event=\"group_deleted\" key=\"id\" expression=\"${message.properties.id}\" />\n    <extendedInfo event=\"group_modified\" key=\"id\" expression=\"${message.properties.id}\" />\n\n    <extendedInfo event=\"search\" key=\"searchDocumentModel\" expression=\"${message.properties.searchDocumentModelAsJson}\" />\n    <extendedInfo event=\"search\" key=\"aggregates\" expression=\"${message.properties.aggregates}\" />\n    <extendedInfo event=\"search\" key=\"aggregatesMatches\" expression=\"${message.properties.aggregatesMatches}\" />\n    <extendedInfo event=\"search\" key=\"effectiveQuery\" expression=\"${message.properties.effectiveQuery}\" />\n    <extendedInfo event=\"search\" key=\"pageIndex\" expression=\"${message.properties.pageIndex}\" />\n    <extendedInfo event=\"search\" key=\"resultsCountInPage\" expression=\"${message.properties.resultsCountInPage}\" />\n    <extendedInfo event=\"search\" key=\"resultsCount\" expression=\"${message.properties.resultsCount}\" />\n    <extendedInfo event=\"search\" key=\"pageProviderName\" expression=\"${message.properties.pageProviderName}\" />\n    <extendedInfo event=\"search\" key=\"queryParams\" expression=\"${message.properties.queryParams}\" />\n    <extendedInfo event=\"search\" key=\"params\" expression=\"${message.properties.params}\" />\n    <extendedInfo event=\"search\" key=\"executionTimeMs\" expression=\"${message.properties.executionTimeMs}\" />\n    <extendedInfo event=\"search\" key=\"searchFields\" expression=\"${message.properties.searchFields}\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/audit-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "aliases": [
            "org.nuxeo.ecm.platform.audit.PageProviderservice.contrib"
          ],
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.query.api.PageProviderService--providers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.PageProviderService.contrib/Contributions/org.nuxeo.audit.PageProviderService.contrib--providers",
              "id": "org.nuxeo.audit.PageProviderService.contrib--providers",
              "registrationOrder": 7,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "2025.27.34",
              "xml": "<extension point=\"providers\" target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\">\n\n    <genericPageProvider class=\"org.nuxeo.audit.provider.AuditPageProvider\" name=\"EVENTS_VIEW\">\n      <property name=\"coreSession\">#{documentManager}</property>\n      <searchDocumentType>BasicAuditSearch</searchDocumentType>\n      <whereClause>\n        <predicate operator=\"BETWEEN\" parameter=\"eventDate\">\n          <field name=\"startDate\" schema=\"basicauditsearch\"/>\n          <field name=\"endDate\" schema=\"basicauditsearch\"/>\n        </predicate>\n        <predicate operator=\"=\" parameter=\"category\">\n          <field name=\"eventCategory\" schema=\"basicauditsearch\"/>\n        </predicate>\n        <predicate operator=\"IN\" parameter=\"eventId\">\n          <field name=\"eventIds\" schema=\"basicauditsearch\"/>\n        </predicate>\n        <predicate operator=\"=\" parameter=\"principalName\">\n          <field name=\"principalName\" schema=\"basicauditsearch\"/>\n        </predicate>\n      </whereClause>\n      <sort ascending=\"false\" column=\"eventDate\"/>\n      <pageSize>10</pageSize>\n      <maxPageSize>1000</maxPageSize>\n    </genericPageProvider>\n\n    <genericPageProvider class=\"org.nuxeo.audit.provider.AuditPageProvider\" name=\"DOCUMENT_HISTORY_PROVIDER_OLD\">\n      <searchDocumentType>BasicAuditSearch</searchDocumentType>\n      <whereClause>\n        <fixedPart>\n          docUUID = ?\n        </fixedPart>\n        <predicate operator=\"BETWEEN\" parameter=\"eventDate\">\n          <field name=\"startDate\" schema=\"basicauditsearch\"/>\n          <field name=\"endDate\" schema=\"basicauditsearch\"/>\n        </predicate>\n        <predicate operator=\"IN\" parameter=\"category\">\n          <field name=\"eventCategories\" schema=\"basicauditsearch\"/>\n        </predicate>\n        <predicate operator=\"IN\" parameter=\"eventId\">\n          <field name=\"eventIds\" schema=\"basicauditsearch\"/>\n        </predicate>\n        <predicate operator=\"IN\" parameter=\"principalName\">\n          <field name=\"principalNames\" schema=\"basicauditsearch\"/>\n        </predicate>\n      </whereClause>\n      <sort ascending=\"true\" column=\"id\"/>\n      <pageSize>5</pageSize>\n    </genericPageProvider>\n\n\n    <genericPageProvider class=\"org.nuxeo.audit.provider.DocumentHistoryPageProvider\" name=\"DOCUMENT_HISTORY_PROVIDER\">\n      <searchDocumentType>BasicAuditSearch</searchDocumentType>\n      <whereClause>\n        <predicate operator=\"BETWEEN\" parameter=\"eventDate\">\n          <field name=\"startDate\" schema=\"basicauditsearch\"/>\n          <field name=\"endDate\" schema=\"basicauditsearch\"/>\n        </predicate>\n        <predicate operator=\"IN\" parameter=\"category\">\n          <field name=\"eventCategories\" schema=\"basicauditsearch\"/>\n        </predicate>\n        <predicate operator=\"IN\" parameter=\"eventId\">\n          <field name=\"eventIds\" schema=\"basicauditsearch\"/>\n        </predicate>\n        <predicate operator=\"IN\" parameter=\"principalName\">\n          <field name=\"principalNames\" schema=\"basicauditsearch\"/>\n        </predicate>\n      </whereClause>\n      <sort ascending=\"false\" column=\"eventDate\"/>\n      <pageSize>10</pageSize>\n      <maxPageSize>1000</maxPageSize>\n    </genericPageProvider>\n\n    <genericPageProvider class=\"org.nuxeo.audit.provider.AuditPageProvider\" name=\"ADMIN_HISTORY\">\n      <property name=\"coreSession\"/>\n      <searchDocumentType>BasicAuditSearch</searchDocumentType>\n      <whereClause>\n        <predicate operator=\"BETWEEN\" parameter=\"eventDate\">\n          <field name=\"startDate\" schema=\"basicauditsearch\"/>\n          <field name=\"endDate\" schema=\"basicauditsearch\"/>\n        </predicate>\n        <predicate operator=\"=\" parameter=\"category\">\n          <field name=\"eventCategory\" schema=\"basicauditsearch\"/>\n        </predicate>\n        <predicate operator=\"IN\" parameter=\"eventId\">\n          <field name=\"eventIds\" schema=\"basicauditsearch\"/>\n        </predicate>\n        <predicate operator=\"=\" parameter=\"principalName\">\n          <field name=\"principalName\" schema=\"basicauditsearch\"/>\n        </predicate>\n      </whereClause>\n      <sort ascending=\"false\" column=\"eventDate\"/>\n      <pageSize>10</pageSize>\n      <maxPageSize>1000</maxPageSize>\n    </genericPageProvider>\n\n    <genericPageProvider class=\"org.nuxeo.audit.provider.AuditPageProvider\" name=\"LATEST_AUDITED_CREATED_USERS_OR_GROUPS_PROVIDER\">\n      <pattern>\n        SELECT * FROM LogEntry WHERE category = 'userGroup' AND eventId IN ('user_created', 'group_created')\n      </pattern>\n      <sort ascending=\"false\" column=\"eventDate\"/>\n      <pageSize>5</pageSize>\n      <maxPageSize>100</maxPageSize>\n    </genericPageProvider>\n\n    <genericPageProvider class=\"org.nuxeo.audit.provider.LatestCreatedUsersOrGroupsPageProvider\" name=\"LATEST_CREATED_USERS_OR_GROUPS_PROVIDER\">\n    </genericPageProvider>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.PageProviderService.contrib",
          "name": "org.nuxeo.audit.PageProviderService.contrib",
          "requirements": [],
          "resolutionOrder": 245,
          "services": [],
          "startOrder": 37,
          "version": "2025.27.34",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.audit.PageProviderService.contrib\">\n  <!-- Alias is deprecated since 2025.0 -->\n  <alias>org.nuxeo.ecm.platform.audit.PageProviderservice.contrib</alias>\n\n  <extension target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\" point=\"providers\">\n\n    <genericPageProvider name=\"EVENTS_VIEW\" class=\"org.nuxeo.audit.provider.AuditPageProvider\">\n      <property name=\"coreSession\">#{documentManager}</property>\n      <searchDocumentType>BasicAuditSearch</searchDocumentType>\n      <whereClause>\n        <predicate parameter=\"eventDate\" operator=\"BETWEEN\">\n          <field schema=\"basicauditsearch\" name=\"startDate\" />\n          <field schema=\"basicauditsearch\" name=\"endDate\" />\n        </predicate>\n        <predicate parameter=\"category\" operator=\"=\">\n          <field schema=\"basicauditsearch\" name=\"eventCategory\" />\n        </predicate>\n        <predicate parameter=\"eventId\" operator=\"IN\">\n          <field schema=\"basicauditsearch\" name=\"eventIds\" />\n        </predicate>\n        <predicate parameter=\"principalName\" operator=\"=\">\n          <field schema=\"basicauditsearch\" name=\"principalName\" />\n        </predicate>\n      </whereClause>\n      <sort column=\"eventDate\" ascending=\"false\" />\n      <pageSize>10</pageSize>\n      <maxPageSize>1000</maxPageSize>\n    </genericPageProvider>\n\n    <genericPageProvider name=\"DOCUMENT_HISTORY_PROVIDER_OLD\" class=\"org.nuxeo.audit.provider.AuditPageProvider\">\n      <searchDocumentType>BasicAuditSearch</searchDocumentType>\n      <whereClause>\n        <fixedPart>\n          docUUID = ?\n        </fixedPart>\n        <predicate parameter=\"eventDate\" operator=\"BETWEEN\">\n          <field schema=\"basicauditsearch\" name=\"startDate\" />\n          <field schema=\"basicauditsearch\" name=\"endDate\" />\n        </predicate>\n        <predicate parameter=\"category\" operator=\"IN\">\n          <field schema=\"basicauditsearch\" name=\"eventCategories\" />\n        </predicate>\n        <predicate parameter=\"eventId\" operator=\"IN\">\n          <field schema=\"basicauditsearch\" name=\"eventIds\" />\n        </predicate>\n        <predicate parameter=\"principalName\" operator=\"IN\">\n          <field schema=\"basicauditsearch\" name=\"principalNames\" />\n        </predicate>\n      </whereClause>\n      <sort column=\"id\" ascending=\"true\" />\n      <pageSize>5</pageSize>\n    </genericPageProvider>\n\n\n    <genericPageProvider name=\"DOCUMENT_HISTORY_PROVIDER\" class=\"org.nuxeo.audit.provider.DocumentHistoryPageProvider\">\n      <searchDocumentType>BasicAuditSearch</searchDocumentType>\n      <whereClause>\n        <predicate parameter=\"eventDate\" operator=\"BETWEEN\">\n          <field schema=\"basicauditsearch\" name=\"startDate\" />\n          <field schema=\"basicauditsearch\" name=\"endDate\" />\n        </predicate>\n        <predicate parameter=\"category\" operator=\"IN\">\n          <field schema=\"basicauditsearch\" name=\"eventCategories\" />\n        </predicate>\n        <predicate parameter=\"eventId\" operator=\"IN\">\n          <field schema=\"basicauditsearch\" name=\"eventIds\" />\n        </predicate>\n        <predicate parameter=\"principalName\" operator=\"IN\">\n          <field schema=\"basicauditsearch\" name=\"principalNames\" />\n        </predicate>\n      </whereClause>\n      <sort column=\"eventDate\" ascending=\"false\" />\n      <pageSize>10</pageSize>\n      <maxPageSize>1000</maxPageSize>\n    </genericPageProvider>\n\n    <genericPageProvider name=\"ADMIN_HISTORY\" class=\"org.nuxeo.audit.provider.AuditPageProvider\">\n      <property name=\"coreSession\" />\n      <searchDocumentType>BasicAuditSearch</searchDocumentType>\n      <whereClause>\n        <predicate parameter=\"eventDate\" operator=\"BETWEEN\">\n          <field schema=\"basicauditsearch\" name=\"startDate\" />\n          <field schema=\"basicauditsearch\" name=\"endDate\" />\n        </predicate>\n        <predicate parameter=\"category\" operator=\"=\">\n          <field schema=\"basicauditsearch\" name=\"eventCategory\" />\n        </predicate>\n        <predicate parameter=\"eventId\" operator=\"IN\">\n          <field schema=\"basicauditsearch\" name=\"eventIds\" />\n        </predicate>\n        <predicate parameter=\"principalName\" operator=\"=\">\n          <field schema=\"basicauditsearch\" name=\"principalName\" />\n        </predicate>\n      </whereClause>\n      <sort column=\"eventDate\" ascending=\"false\" />\n      <pageSize>10</pageSize>\n      <maxPageSize>1000</maxPageSize>\n    </genericPageProvider>\n\n    <genericPageProvider name=\"LATEST_AUDITED_CREATED_USERS_OR_GROUPS_PROVIDER\"\n                         class=\"org.nuxeo.audit.provider.AuditPageProvider\">\n      <pattern>\n        SELECT * FROM LogEntry WHERE category = 'userGroup' AND eventId IN ('user_created', 'group_created')\n      </pattern>\n      <sort column=\"eventDate\" ascending=\"false\" />\n      <pageSize>5</pageSize>\n      <maxPageSize>100</maxPageSize>\n    </genericPageProvider>\n\n    <genericPageProvider name=\"LATEST_CREATED_USERS_OR_GROUPS_PROVIDER\"\n                         class=\"org.nuxeo.audit.provider.LatestCreatedUsersOrGroupsPageProvider\">\n    </genericPageProvider>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/audit-pageprovider-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.scroll.service--scroll",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.scroll.config/Contributions/org.nuxeo.audit.scroll.config--scroll",
              "id": "org.nuxeo.audit.scroll.config--scroll",
              "registrationOrder": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.scroll.service",
                "name": "org.nuxeo.ecm.core.scroll.service",
                "type": "service"
              },
              "version": "2025.27.34",
              "xml": "<extension point=\"scroll\" target=\"org.nuxeo.ecm.core.scroll.service\">\n    <scroll class=\"org.nuxeo.audit.scroll.AuditScroll\" name=\"audit\" type=\"queryBuilder\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.scroll.config",
          "name": "org.nuxeo.audit.scroll.config",
          "requirements": [],
          "resolutionOrder": 246,
          "services": [],
          "startOrder": 44,
          "version": "2025.27.34",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.audit.scroll.config\" version=\"1.0.0\">\n  <extension point=\"scroll\" target=\"org.nuxeo.ecm.core.scroll.service\">\n    <scroll type=\"queryBuilder\" name=\"audit\" class=\"org.nuxeo.audit.scroll.AuditScroll\" />\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/audit-scroll-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.audit.service.AuditComponent",
          "declaredStartOrder": 70,
          "documentationHtml": "",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.audit.service.AuditComponent",
              "descriptors": [
                "org.nuxeo.audit.service.extension.EventDescriptor"
              ],
              "documentation": "\n      This service registers auditable events.\n      <p/>\n\n      Registered events are dummy strings for now.\n      <p/>\n\n      This service is used to filter auditable events from the JMS topic based\n      on their names. The following XML snipset give figures out how the default\n      event types are selected for auditing.\n\n      <programlisting>\n    <extension point=\"event\" target=\"org.nuxeo.audit.service.AuditComponent\">\n        <event name=\"documentCreated\"/>\n        <event name=\"documentCreatedByCopy\"/>\n        <event name=\"documentDuplicated\"/>\n        <event name=\"documentMoved\"/>\n        <event name=\"documentRemoved\"/>\n        <event name=\"documentModified\"/>\n        <event name=\"documentLocked\"/>\n        <event name=\"documentUnlocked\"/>\n        <event name=\"documentSecurityUpdated\"/>\n        <event name=\"lifecycle_transition_event\"/>\n        <event name=\"documentTrashed\"/>\n        <event name=\"documentUntrashed\"/>\n    </extension>\n</programlisting>\n\n\n      @deprecated since 2025.16, use routes + extendedInfo extension points instead\n    \n",
              "documentationHtml": "<p>\nThis service registers auditable events.\n</p><p>\nRegistered events are dummy strings for now.\n</p><p>\nThis service is used to filter auditable events from the JMS topic based\non their names. The following XML snipset give figures out how the default\nevent types are selected for auditing.\n</p><p>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n</p><p>\n&#64;deprecated since 2025.16, use routes &#43; extendedInfo extension points instead\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.service.AuditComponent/ExtensionPoints/org.nuxeo.audit.service.AuditComponent--event",
              "id": "org.nuxeo.audit.service.AuditComponent--event",
              "label": "event (org.nuxeo.audit.service.AuditComponent)",
              "name": "event",
              "version": "2025.27.34"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.audit.service.AuditComponent",
              "descriptors": [
                "org.nuxeo.audit.service.extension.AuditRouteDescriptor"
              ],
              "documentation": "\n      Allows to register audit routes for log entry backend storage location.\n      <p/>\n\n      A route is basically composed of a backend name and a list of events to forward to this backend.\n      <p/>\n\n      Such routes also register the events to convert to log entries that will later be routed to backends.\n\n      <programlisting>\n    <extension point=\"routes\" target=\"org.nuxeo.audit.service.AuditComponent\">\n        <route name=\"default\">\n            <backend name=\"default\"/>\n            <event name=\"documentCreated\"/>\n            <event enabled=\"true\" name=\"documentModified\"/>\n        </route>\n    </extension>\n</programlisting>\n<p/>\n\n      A route can also be composed of a backend name and a list of predicates.\n      <p/>\n\n      Such routes don't register events to convert to log entries, they only act at backend routing layer.\n\n      <programlisting>\n    <extension point=\"routes\" target=\"org.nuxeo.audit.service.AuditComponent\">\n        <route name=\"documentCategory\">\n            <backend name=\"default\"/>\n            <predicate class=\"org.nuxeo.audit.service.route.CategoryLogEntryPredicate\">\n                <property name=\"category\">eventDocumentCategory</property>\n            </predicate>\n        </route>\n    </extension>\n</programlisting>\n<p/>\n\n      The events and predicates can be combined, they are computed as AND when routing log entries to backends. The OR\n      combination is achieved by declaring several routes with the same backend. Keep in mind that event conversion is\n      only done for events registered in live routes.\n      <p/>\n\n      A route can be marked as non-live using the <code>live=\"false\"</code>\n attribute. Non-live routes are excluded from\n      the automatic ingestion path: they never receive produced entries, and the events they declare are not converted\n      to log entries unless a live route declares them too. They are meant for administrative operations on existing\n      entries, such as migration or purge.\n\n      <programlisting>\n    <extension point=\"routes\" target=\"org.nuxeo.audit.service.AuditComponent\">\n        <route live=\"false\" name=\"archive\">\n            <backend name=\"cold\"/>\n            <event name=\"documentCreated\"/>\n        </route>\n    </extension>\n</programlisting>\n",
              "documentationHtml": "<p>\nAllows to register audit routes for log entry backend storage location.\n</p><p>\nA route is basically composed of a backend name and a list of events to forward to this backend.\n</p><p>\nSuch routes also register the events to convert to log entries that will later be routed to backends.\n</p><p>\n\n\n\n\n\n\n\n\n\n</p><p>\nA route can also be composed of a backend name and a list of predicates.\n</p><p>\nSuch routes don&#39;t register events to convert to log entries, they only act at backend routing layer.\n</p><p>\n\n\n\n\n\neventDocumentCategory\n\n\n\n\n</p><p>\nThe events and predicates can be combined, they are computed as AND when routing log entries to backends. The OR\ncombination is achieved by declaring several routes with the same backend. Keep in mind that event conversion is\nonly done for events registered in live routes.\n</p><p>\nA route can be marked as non-live using the <code>live&#61;&#34;false&#34;</code>\nattribute. Non-live routes are excluded from\nthe automatic ingestion path: they never receive produced entries, and the events they declare are not converted\nto log entries unless a live route declares them too. They are meant for administrative operations on existing\nentries, such as migration or purge.\n</p><p>\n\n\n\n\n\n\n\n</p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.service.AuditComponent/ExtensionPoints/org.nuxeo.audit.service.AuditComponent--routes",
              "id": "org.nuxeo.audit.service.AuditComponent--routes",
              "label": "routes (org.nuxeo.audit.service.AuditComponent)",
              "name": "routes",
              "version": "2025.27.34"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.audit.service.AuditComponent",
              "descriptors": [
                "org.nuxeo.audit.service.extension.ExtendedInfoDescriptor"
              ],
              "documentation": "\n      This service registered extended info mappings.\n      <p/>\n\n      This service is used to evaluate EL expression using document as context\n      registering results into a map indexed by names.\n    \n",
              "documentationHtml": "<p>\nThis service registered extended info mappings.\n</p><p>\nThis service is used to evaluate EL expression using document as context\nregistering results into a map indexed by names.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.service.AuditComponent/ExtensionPoints/org.nuxeo.audit.service.AuditComponent--extendedInfo",
              "id": "org.nuxeo.audit.service.AuditComponent--extendedInfo",
              "label": "extendedInfo (org.nuxeo.audit.service.AuditComponent)",
              "name": "extendedInfo",
              "version": "2025.27.34"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.audit.service.AuditComponent",
              "descriptors": [
                "org.nuxeo.audit.service.extension.AdapterDescriptor"
              ],
              "documentation": "\n      register the adapter that will be injected in EL context\n    \n",
              "documentationHtml": "<p>\nregister the adapter that will be injected in EL context\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.service.AuditComponent/ExtensionPoints/org.nuxeo.audit.service.AuditComponent--adapter",
              "id": "org.nuxeo.audit.service.AuditComponent--adapter",
              "label": "adapter (org.nuxeo.audit.service.AuditComponent)",
              "name": "adapter",
              "version": "2025.27.34"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.audit.service.AuditComponent",
              "descriptors": [
                "org.nuxeo.audit.service.extension.AuditBackendFactoryDescriptor"
              ],
              "documentation": "\n      Allows to register a backend implementation for the Audit Service\n    \n",
              "documentationHtml": "<p>\nAllows to register a backend implementation for the Audit Service\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.service.AuditComponent/ExtensionPoints/org.nuxeo.audit.service.AuditComponent--backendFactory",
              "id": "org.nuxeo.audit.service.AuditComponent--backendFactory",
              "label": "backendFactory (org.nuxeo.audit.service.AuditComponent)",
              "name": "backendFactory",
              "version": "2025.27.34"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.service.AuditComponent",
          "name": "org.nuxeo.audit.service.AuditComponent",
          "requirements": [],
          "resolutionOrder": 247,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.audit.service.AuditComponent",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.service.AuditComponent/Services/org.nuxeo.audit.service.AuditBackend",
              "id": "org.nuxeo.audit.service.AuditBackend",
              "overriden": false,
              "version": "2025.27.34"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.audit.service.AuditComponent",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.service.AuditComponent/Services/org.nuxeo.audit.service.AuditRouter",
              "id": "org.nuxeo.audit.service.AuditRouter",
              "overriden": false,
              "version": "2025.27.34"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.audit.service.AuditComponent",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.service.AuditComponent/Services/org.nuxeo.audit.service.AuditService",
              "id": "org.nuxeo.audit.service.AuditService",
              "overriden": false,
              "version": "2025.27.34"
            }
          ],
          "startOrder": 554,
          "version": "2025.27.34",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.audit.service.AuditComponent\">\n\n  <implementation class=\"org.nuxeo.audit.service.AuditComponent\" />\n\n  <service>\n    <!-- @deprecated since 2025.16, default audit backend should be explicitly retrieved from AuditService -->\n    <provide interface=\"org.nuxeo.audit.service.AuditBackend\" />\n    <provide interface=\"org.nuxeo.audit.service.AuditRouter\" />\n    <provide interface=\"org.nuxeo.audit.service.AuditService\" />\n  </service>\n\n\n  <extension-point name=\"event\">\n    <documentation>\n      This service registers auditable events.\n      <p />\n      Registered events are dummy strings for now.\n      <p />\n      This service is used to filter auditable events from the JMS topic based\n      on their names. The following XML snipset give figures out how the default\n      event types are selected for auditing.\n\n      <programlisting>\n        <extension target=\"org.nuxeo.audit.service.AuditComponent\" point=\"event\">\n          <event name=\"documentCreated\" />\n          <event name=\"documentCreatedByCopy\" />\n          <event name=\"documentDuplicated\" />\n          <event name=\"documentMoved\" />\n          <event name=\"documentRemoved\" />\n          <event name=\"documentModified\" />\n          <event name=\"documentLocked\" />\n          <event name=\"documentUnlocked\" />\n          <event name=\"documentSecurityUpdated\" />\n          <event name=\"lifecycle_transition_event\" />\n          <event name=\"documentTrashed\" />\n          <event name=\"documentUntrashed\" />\n        </extension>\n      </programlisting>\n\n      @deprecated since 2025.16, use routes + extendedInfo extension points instead\n    </documentation>\n\n    <object class=\"org.nuxeo.audit.service.extension.EventDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"routes\">\n    <documentation>\n      Allows to register audit routes for log entry backend storage location.\n      <p />\n      A route is basically composed of a backend name and a list of events to forward to this backend.\n      <p />\n      Such routes also register the events to convert to log entries that will later be routed to backends.\n\n      <programlisting>\n        <extension target=\"org.nuxeo.audit.service.AuditComponent\" point=\"routes\">\n          <route name=\"default\">\n            <backend name=\"default\" />\n            <event name=\"documentCreated\" />\n            <event name=\"documentModified\" enabled=\"true\" />\n          </route>\n        </extension>\n      </programlisting>\n      <p />\n      A route can also be composed of a backend name and a list of predicates.\n      <p />\n      Such routes don't register events to convert to log entries, they only act at backend routing layer.\n\n      <programlisting>\n        <extension target=\"org.nuxeo.audit.service.AuditComponent\" point=\"routes\">\n          <route name=\"documentCategory\">\n            <backend name=\"default\" />\n            <predicate class=\"org.nuxeo.audit.service.route.CategoryLogEntryPredicate\">\n              <property name=\"category\">eventDocumentCategory</property>\n            </predicate>\n          </route>\n        </extension>\n      </programlisting>\n      <p />\n      The events and predicates can be combined, they are computed as AND when routing log entries to backends. The OR\n      combination is achieved by declaring several routes with the same backend. Keep in mind that event conversion is\n      only done for events registered in live routes.\n      <p />\n      A route can be marked as non-live using the <code>live=\"false\"</code> attribute. Non-live routes are excluded from\n      the automatic ingestion path: they never receive produced entries, and the events they declare are not converted\n      to log entries unless a live route declares them too. They are meant for administrative operations on existing\n      entries, such as migration or purge.\n\n      <programlisting>\n        <extension target=\"org.nuxeo.audit.service.AuditComponent\" point=\"routes\">\n          <route name=\"archive\" live=\"false\">\n            <backend name=\"cold\" />\n            <event name=\"documentCreated\" />\n          </route>\n        </extension>\n      </programlisting>\n    </documentation>\n\n    <object class=\"org.nuxeo.audit.service.extension.AuditRouteDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"extendedInfo\">\n    <documentation>\n      This service registered extended info mappings.\n      <p />\n      This service is used to evaluate EL expression using document as context\n      registering results into a map indexed by names.\n    </documentation>\n\n    <object class=\"org.nuxeo.audit.service.extension.ExtendedInfoDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"adapter\">\n\n    <documentation>\n      register the adapter that will be injected in EL context\n    </documentation>\n\n    <object class=\"org.nuxeo.audit.service.extension.AdapterDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"backendFactory\">\n    <documentation>\n      Allows to register a backend implementation for the Audit Service\n    </documentation>\n\n    <object class=\"org.nuxeo.audit.service.extension.AuditBackendFactoryDescriptor\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/audit-service.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.event.EventServiceComponent--listener",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.listener.StreamAuditEventListener/Contributions/org.nuxeo.audit.listener.StreamAuditEventListener--listener",
              "id": "org.nuxeo.audit.listener.StreamAuditEventListener--listener",
              "registrationOrder": 19,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2025.27.34",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n    <listener async=\"false\" class=\"org.nuxeo.audit.listener.StreamAuditEventListener\" name=\"auditLoggerListener\" postCommit=\"false\" priority=\"500\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.stream.service--streamProcessor",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.listener.StreamAuditEventListener/Contributions/org.nuxeo.audit.listener.StreamAuditEventListener--streamProcessor",
              "id": "org.nuxeo.audit.listener.StreamAuditEventListener--streamProcessor",
              "registrationOrder": 10,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.stream.service",
                "name": "org.nuxeo.runtime.stream.service",
                "type": "service"
              },
              "version": "2025.27.34",
              "xml": "<extension point=\"streamProcessor\" target=\"org.nuxeo.runtime.stream.service\">\n    <streamProcessor class=\"org.nuxeo.audit.impl.StreamAuditWriter\" defaultCodec=\"avro\" defaultConcurrency=\"1\" defaultPartitions=\"1\" enabled=\"true\" name=\"auditWriter\">\n      <policy batchCapacity=\"25\" batchThreshold=\"500ms\" class=\"org.nuxeo.audit.impl.AuditWriterComputationPolicy\" continueOnFailure=\"false\" delay=\"1s\" maxDelay=\"60s\" maxRetries=\"20\" name=\"default\"/>\n    </streamProcessor>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.listener.StreamAuditEventListener",
          "name": "org.nuxeo.audit.listener.StreamAuditEventListener",
          "requirements": [],
          "resolutionOrder": 248,
          "services": [],
          "startOrder": 43,
          "version": "2025.27.34",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.audit.listener.StreamAuditEventListener\">\n\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\" point=\"listener\">\n    <listener name=\"auditLoggerListener\" async=\"false\" postCommit=\"false\" priority=\"500\"\n              class=\"org.nuxeo.audit.listener.StreamAuditEventListener\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.stream.service\" point=\"streamProcessor\">\n    <streamProcessor name=\"auditWriter\" defaultConcurrency=\"1\" defaultPartitions=\"1\"\n                     defaultCodec=\"${nuxeo.stream.audit.log.codec:=legacy}\" class=\"org.nuxeo.audit.impl.StreamAuditWriter\"\n                     enabled=\"${nuxeo.stream.audit.enabled:=true}\">\n      <policy name=\"default\" class=\"org.nuxeo.audit.impl.AuditWriterComputationPolicy\"\n              batchCapacity=\"${nuxeo.stream.audit.batch.size:=10}\"\n              batchThreshold=\"${nuxeo.stream.audit.batch.threshold.ms:=50}ms\" maxRetries=\"20\" delay=\"1s\" maxDelay=\"60s\"\n              continueOnFailure=\"false\" />\n    </streamProcessor>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/audit-stream-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "aliases": [
            "org.nuxeo.ecm.platform.audit.core.types-contrib"
          ],
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--schema",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.core.types-contrib/Contributions/org.nuxeo.audit.core.types-contrib--schema",
              "id": "org.nuxeo.audit.core.types-contrib--schema",
              "registrationOrder": 14,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.27.34",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <schema name=\"basicauditsearch\" prefix=\"bas\" src=\"schemas/basicauditsearch.xsd\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--doctype",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.core.types-contrib/Contributions/org.nuxeo.audit.core.types-contrib--doctype",
              "id": "org.nuxeo.audit.core.types-contrib--doctype",
              "registrationOrder": 13,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.27.34",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n\n    <facet name=\"ForceAudit\"/>\n\n    <doctype extends=\"Document\" name=\"BasicAuditSearch\">\n      <schema name=\"basicauditsearch\"/>\n      <schema name=\"dublincore\"/>\n      <schema name=\"common\"/>\n    </doctype>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.core.types-contrib",
          "name": "org.nuxeo.audit.core.types-contrib",
          "requirements": [],
          "resolutionOrder": 249,
          "services": [],
          "startOrder": 39,
          "version": "2025.27.34",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.audit.core.types-contrib\" version=\"1.0\">\n  <!-- Alias is deprecated since 2025.0 -->\n  <alias>org.nuxeo.ecm.platform.audit.core.types-contrib</alias>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"schema\">\n    <schema name=\"basicauditsearch\" prefix=\"bas\" src=\"schemas/basicauditsearch.xsd\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"doctype\">\n\n    <facet name=\"ForceAudit\" />\n\n    <doctype name=\"BasicAuditSearch\" extends=\"Document\">\n      <schema name=\"basicauditsearch\" />\n      <schema name=\"dublincore\" />\n      <schema name=\"common\" />\n    </doctype>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/core-type-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "aliases": [
            "org.nuxeo.audit.directoryContrib"
          ],
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.directory.GenericDirectory--directories",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.directory.contrib/Contributions/org.nuxeo.audit.directory.contrib--directories",
              "id": "org.nuxeo.audit.directory.contrib--directories",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.directory.GenericDirectory",
                "name": "org.nuxeo.ecm.directory.GenericDirectory",
                "type": "service"
              },
              "version": "2025.27.34",
              "xml": "<extension point=\"directories\" target=\"org.nuxeo.ecm.directory.GenericDirectory\">\n\n    <directory extends=\"template-vocabulary\" name=\"eventTypes\">\n      <dataFile>directories/event-types.csv</dataFile>\n      <types>\n        <type>system</type>\n      </types>\n    </directory>\n\n    <directory extends=\"template-vocabulary\" name=\"eventCategories\">\n      <dataFile>directories/event-categories.csv</dataFile>\n      <types>\n        <type>system</type>\n      </types>\n    </directory>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.directory.contrib",
          "name": "org.nuxeo.audit.directory.contrib",
          "requirements": [],
          "resolutionOrder": 250,
          "services": [],
          "startOrder": 40,
          "version": "2025.27.34",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.audit.directory.contrib\">\n  <!-- Alias is deprecated since 2025.0 -->\n  <alias>org.nuxeo.audit.directoryContrib</alias>\n\n  <extension target=\"org.nuxeo.ecm.directory.GenericDirectory\" point=\"directories\">\n\n    <directory name=\"eventTypes\" extends=\"template-vocabulary\">\n      <dataFile>directories/event-types.csv</dataFile>\n      <types>\n        <type>system</type>\n      </types>\n    </directory>\n\n    <directory name=\"eventCategories\" extends=\"template-vocabulary\">\n      <dataFile>directories/event-categories.csv</dataFile>\n      <types>\n        <type>system</type>\n      </types>\n    </directory>\n\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/directories-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "aliases": [
            "org.nuxeo.ecm.platform.audit.io.marshallers"
          ],
          "documentation": "\n    Core IO registered marshallers set.\n  \n",
          "documentationHtml": "<p>\nCore IO registered marshallers set.\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.io.MarshallerRegistry--marshallers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.io.marshallers/Contributions/org.nuxeo.audit.io.marshallers--marshallers",
              "id": "org.nuxeo.audit.io.marshallers--marshallers",
              "registrationOrder": 6,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.io.MarshallerRegistry",
                "name": "org.nuxeo.ecm.core.io.MarshallerRegistry",
                "type": "service"
              },
              "version": "2025.27.34",
              "xml": "<extension point=\"marshallers\" target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\">\n    <register class=\"org.nuxeo.audit.io.AuditRouterIntrospectionPlantUMLWriter\" enable=\"true\"/>\n    <!-- preview document enricher -->\n    <register class=\"org.nuxeo.audit.io.LogEntryJsonReader\" enable=\"true\"/>\n    <register class=\"org.nuxeo.audit.io.LogEntryJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.audit.io.LogEntryListJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.audit.io.LogEntryCSVWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.audit.io.LogEntryListCSVWriter\" enable=\"true\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.io.marshallers",
          "name": "org.nuxeo.audit.io.marshallers",
          "requirements": [],
          "resolutionOrder": 252,
          "services": [],
          "startOrder": 42,
          "version": "2025.27.34",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.audit.io.marshallers\" version=\"1.0.0\">\n  <!-- Alias is deprecated since 2025.0 -->\n  <alias>org.nuxeo.ecm.platform.audit.io.marshallers</alias>\n  <documentation>\n    Core IO registered marshallers set.\n  </documentation>\n  <extension target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\" point=\"marshallers\">\n    <register class=\"org.nuxeo.audit.io.AuditRouterIntrospectionPlantUMLWriter\" enable=\"true\" />\n    <!-- preview document enricher -->\n    <register class=\"org.nuxeo.audit.io.LogEntryJsonReader\" enable=\"true\" />\n    <register class=\"org.nuxeo.audit.io.LogEntryJsonWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.audit.io.LogEntryListJsonWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.audit.io.LogEntryCSVWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.audit.io.LogEntryListCSVWriter\" enable=\"true\" />\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/marshallers-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.audit.mem.MemAuditBackendFactory",
          "declaredStartOrder": 69,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.mem.MemAuditBackendFactory",
          "name": "org.nuxeo.audit.mem.MemAuditBackendFactory",
          "requirements": [],
          "resolutionOrder": 253,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.audit.mem.MemAuditBackendFactory",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.mem.MemAuditBackendFactory/Services/org.nuxeo.audit.mem.MemAuditBackendFactory",
              "id": "org.nuxeo.audit.mem.MemAuditBackendFactory",
              "overriden": false,
              "version": "2025.27.34"
            }
          ],
          "startOrder": 553,
          "version": "2025.27.34",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.audit.mem.MemAuditBackendFactory\">\n\n  <implementation class=\"org.nuxeo.audit.mem.MemAuditBackendFactory\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.audit.mem.MemAuditBackendFactory\" />\n  </service>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/mem-audit-backend-factory-service.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
          "documentation": "\n    Service that deals with audit.\n    <p/>\n\n    Most of the work is done at EJB layer though.\n\n    This supports JMS events based\n    notifications on a dedicated topic.\n\n    @version 1.0\n    @author Julien Anguenot\n    @deprecated since 2025.0, this component and all its content is deprecated, you should use APIs located under\n    org.nuxeo.audit.\n  \n",
          "documentationHtml": "<p>\nService that deals with audit.\n</p><p>\nMost of the work is done at EJB layer though.\n</p><p>\nThis supports JMS events based\nnotifications on a dedicated topic.\n</p><p>\n&#64;version 1.0\n</p><p>\n&#64;deprecated since 2025.0, this component and all its content is deprecated, you should use APIs located under\norg.nuxeo.audit.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "descriptors": [
                "org.nuxeo.audit.service.extension.EventDescriptor"
              ],
              "documentation": "\n      This service registers auditable events.\n      <p/>\n\n      Registered events are dummy strings for now.\n      <p/>\n\n      This service is used to filter auditable events from the JMS topic based\n      on their names. The following XML snipset give figures out how the default\n      event types are selected for auditing.\n\n      <programlisting>\n    <extension point=\"event\" target=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\">\n        <event name=\"documentCreated\"/>\n        <event name=\"documentCreatedByCopy\"/>\n        <event name=\"documentDuplicated\"/>\n        <event name=\"documentMoved\"/>\n        <event name=\"documentRemoved\"/>\n        <event name=\"documentModified\"/>\n        <event name=\"documentLocked\"/>\n        <event name=\"documentUnlocked\"/>\n        <event name=\"documentSecurityUpdated\"/>\n        <event name=\"lifecycle_transition_event\"/>\n        <event name=\"documentTrashed\"/>\n        <event name=\"documentUntrashed\"/>\n    </extension>\n</programlisting>\n",
              "documentationHtml": "<p>\nThis service registers auditable events.\n</p><p>\nRegistered events are dummy strings for now.\n</p><p>\nThis service is used to filter auditable events from the JMS topic based\non their names. The following XML snipset give figures out how the default\nevent types are selected for auditing.\n</p><p>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n</p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/ExtensionPoints/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--event",
              "id": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--event",
              "label": "event (org.nuxeo.ecm.platform.audit.service.NXAuditEventsService)",
              "name": "event",
              "version": "2025.27.34"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "descriptors": [
                "org.nuxeo.audit.service.extension.ExtendedInfoDescriptor"
              ],
              "documentation": "\n      This service registered extended info mappings.\n\n      <p/>\n\n      This service is used to evaluate EL expression using document as context\n      regist:ering results into a map indexed by names.\n    \n",
              "documentationHtml": "<p>\nThis service registered extended info mappings.\n</p><p>\nThis service is used to evaluate EL expression using document as context\nregist:ering results into a map indexed by names.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/ExtensionPoints/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--extendedInfo",
              "id": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--extendedInfo",
              "label": "extendedInfo (org.nuxeo.ecm.platform.audit.service.NXAuditEventsService)",
              "name": "extendedInfo",
              "version": "2025.27.34"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "descriptors": [
                "org.nuxeo.audit.service.extension.AdapterDescriptor"
              ],
              "documentation": "\n      register the adapter that will be injected in EL context\n    \n",
              "documentationHtml": "<p>\nregister the adapter that will be injected in EL context\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/ExtensionPoints/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--adapter",
              "id": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--adapter",
              "label": "adapter (org.nuxeo.ecm.platform.audit.service.NXAuditEventsService)",
              "name": "adapter",
              "version": "2025.27.34"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "descriptors": [
                "org.nuxeo.ecm.platform.audit.service.extension.AuditBackendDescriptor"
              ],
              "documentation": "\n      Allows to register a backend implementation for the Audit Service\n    \n",
              "documentationHtml": "<p>\nAllows to register a backend implementation for the Audit Service\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/ExtensionPoints/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--backend",
              "id": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--backend",
              "label": "backend (org.nuxeo.ecm.platform.audit.service.NXAuditEventsService)",
              "name": "backend",
              "version": "2025.27.34"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "descriptors": [
                "org.nuxeo.ecm.platform.audit.service.extension.AuditStorageDescriptor"
              ],
              "documentation": "\n      Allows to register a storage implementation for the Audit Service\n    \n",
              "documentationHtml": "<p>\nAllows to register a storage implementation for the Audit Service\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/ExtensionPoints/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--storage",
              "id": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--storage",
              "label": "storage (org.nuxeo.ecm.platform.audit.service.NXAuditEventsService)",
              "name": "storage",
              "version": "2025.27.34"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
          "name": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
          "requirements": [
            "org.nuxeo.runtime.metrics.MetricsService"
          ],
          "resolutionOrder": 616,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/Services/org.nuxeo.ecm.platform.audit.service.AuditBackend",
              "id": "org.nuxeo.ecm.platform.audit.service.AuditBackend",
              "overriden": false,
              "version": "2025.27.34"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/Services/org.nuxeo.ecm.platform.audit.api.AuditReader",
              "id": "org.nuxeo.ecm.platform.audit.api.AuditReader",
              "overriden": false,
              "version": "2025.27.34"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/Services/org.nuxeo.ecm.platform.audit.api.AuditLogger",
              "id": "org.nuxeo.ecm.platform.audit.api.AuditLogger",
              "overriden": false,
              "version": "2025.27.34"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/Services/org.nuxeo.ecm.platform.audit.api.Logs",
              "id": "org.nuxeo.ecm.platform.audit.api.Logs",
              "overriden": false,
              "version": "2025.27.34"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/Services/org.nuxeo.ecm.platform.audit.api.DocumentHistoryReader",
              "id": "org.nuxeo.ecm.platform.audit.api.DocumentHistoryReader",
              "overriden": false,
              "version": "2025.27.34"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/Services/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "id": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "overriden": false,
              "version": "2025.27.34"
            }
          ],
          "startOrder": 626,
          "version": "2025.27.34",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\">\n\n  <require>org.nuxeo.runtime.metrics.MetricsService</require>\n\n  <documentation>\n    Service that deals with audit.\n    <p />\n    Most of the work is done at EJB layer though.\n\n    This supports JMS events based\n    notifications on a dedicated topic.\n\n    @version 1.0\n    @author Julien Anguenot\n    @deprecated since 2025.0, this component and all its content is deprecated, you should use APIs located under\n    org.nuxeo.audit.\n  </documentation>\n\n  <implementation class=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.platform.audit.service.AuditBackend\" />\n    <provide interface=\"org.nuxeo.ecm.platform.audit.api.AuditReader\" />\n    <provide interface=\"org.nuxeo.ecm.platform.audit.api.AuditLogger\" />\n    <provide interface=\"org.nuxeo.ecm.platform.audit.api.Logs\" />\n    <provide interface=\"org.nuxeo.ecm.platform.audit.api.DocumentHistoryReader\" />\n    <provide interface=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\" />\n  </service>\n\n  <extension-point name=\"event\">\n    <documentation>\n      This service registers auditable events.\n      <p />\n      Registered events are dummy strings for now.\n      <p />\n      This service is used to filter auditable events from the JMS topic based\n      on their names. The following XML snipset give figures out how the default\n      event types are selected for auditing.\n\n      <programlisting>\n        <extension target=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\" point=\"event\">\n          <event name=\"documentCreated\" />\n          <event name=\"documentCreatedByCopy\" />\n          <event name=\"documentDuplicated\" />\n          <event name=\"documentMoved\" />\n          <event name=\"documentRemoved\" />\n          <event name=\"documentModified\" />\n          <event name=\"documentLocked\" />\n          <event name=\"documentUnlocked\" />\n          <event name=\"documentSecurityUpdated\" />\n          <event name=\"lifecycle_transition_event\" />\n          <event name=\"documentTrashed\" />\n          <event name=\"documentUntrashed\" />\n        </extension>\n      </programlisting>\n    </documentation>\n\n    <object class=\"org.nuxeo.audit.service.extension.EventDescriptor\" />\n\n  </extension-point>\n\n  <extension-point name=\"extendedInfo\">\n\n    <documentation>\n      This service registered extended info mappings.\n\n      <p />\n      This service is used to evaluate EL expression using document as context\n      regist:ering results into a map indexed by names.\n    </documentation>\n\n    <object class=\"org.nuxeo.audit.service.extension.ExtendedInfoDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"adapter\">\n\n    <documentation>\n      register the adapter that will be injected in EL context\n    </documentation>\n\n    <object class=\"org.nuxeo.audit.service.extension.AdapterDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"backend\">\n\n    <documentation>\n      Allows to register a backend implementation for the Audit Service\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.platform.audit.service.extension.AuditBackendDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"storage\">\n\n    <documentation>\n      Allows to register a storage implementation for the Audit Service\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.platform.audit.service.extension.AuditStorageDescriptor\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/nxaudit-service.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.bulk--actions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.bulk/Contributions/org.nuxeo.audit.bulk--actions",
              "id": "org.nuxeo.audit.bulk--actions",
              "registrationOrder": 18,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.bulk",
                "name": "org.nuxeo.ecm.core.bulk",
                "type": "service"
              },
              "version": "2025.27.34",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.core.bulk\">\n    <action batchSize=\"50\" bucketSize=\"500\" inputStream=\"bulk/copyAudit\" name=\"copyAudit\" validationClass=\"org.nuxeo.audit.bulk.validation.CopyAuditValidation\"/>\n    <action batchSize=\"50\" bucketSize=\"500\" inputStream=\"bulk/routeAudit\" name=\"routeAudit\" validationClass=\"org.nuxeo.audit.bulk.validation.RouteAuditValidation\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.stream.service--streamProcessor",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.bulk/Contributions/org.nuxeo.audit.bulk--streamProcessor",
              "id": "org.nuxeo.audit.bulk--streamProcessor",
              "registrationOrder": 22,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.stream.service",
                "name": "org.nuxeo.runtime.stream.service",
                "type": "service"
              },
              "version": "2025.27.34",
              "xml": "<extension point=\"streamProcessor\" target=\"org.nuxeo.runtime.stream.service\">\n    <streamProcessor class=\"org.nuxeo.audit.bulk.CopyAuditAction\" defaultConcurrency=\"2\" defaultPartitions=\"4\" name=\"copyAudit\">\n      <policy continueOnFailure=\"false\" delay=\"500ms\" maxDelay=\"10s\" maxRetries=\"3\" name=\"default\"/>\n    </streamProcessor>\n    <streamProcessor class=\"org.nuxeo.audit.bulk.RouteAuditAction\" defaultConcurrency=\"2\" defaultPartitions=\"4\" name=\"routeAudit\">\n      <policy continueOnFailure=\"false\" delay=\"500ms\" maxDelay=\"60s\" maxRetries=\"10\" name=\"default\"/>\n    </streamProcessor>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.bulk",
          "name": "org.nuxeo.audit.bulk",
          "requirements": [
            "org.nuxeo.ecm.core.bulk.config"
          ],
          "resolutionOrder": 629,
          "services": [],
          "startOrder": 38,
          "version": "2025.27.34",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.audit.bulk\" version=\"1.0.0\">\n\n  <require>org.nuxeo.ecm.core.bulk.config</require>\n\n  <extension target=\"org.nuxeo.ecm.core.bulk\" point=\"actions\">\n    <action name=\"copyAudit\" inputStream=\"bulk/copyAudit\" bucketSize=\"500\" batchSize=\"50\"\n            validationClass=\"org.nuxeo.audit.bulk.validation.CopyAuditValidation\" />\n    <action name=\"routeAudit\" inputStream=\"bulk/routeAudit\" bucketSize=\"500\" batchSize=\"50\"\n            validationClass=\"org.nuxeo.audit.bulk.validation.RouteAuditValidation\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.stream.service\" point=\"streamProcessor\">\n    <streamProcessor name=\"copyAudit\" class=\"org.nuxeo.audit.bulk.CopyAuditAction\"\n                     defaultConcurrency=\"${nuxeo.bulk.action.copyAudit.defaultConcurrency:=2}\"\n                     defaultPartitions=\"${nuxeo.bulk.action.copyAudit.defaultPartitions:=4}\">\n      <policy name=\"default\" maxRetries=\"3\" delay=\"500ms\" maxDelay=\"10s\" continueOnFailure=\"false\" />\n    </streamProcessor>\n    <streamProcessor name=\"routeAudit\" class=\"org.nuxeo.audit.bulk.RouteAuditAction\"\n                     defaultConcurrency=\"${nuxeo.bulk.action.routeAudit.defaultConcurrency:=2}\"\n                     defaultPartitions=\"${nuxeo.bulk.action.routeAudit.defaultPartitions:=4}\">\n      <policy name=\"default\" maxRetries=\"10\" delay=\"500ms\" maxDelay=\"60s\" continueOnFailure=\"false\" />\n    </streamProcessor>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/audit-bulk-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-audit-core-2025.27.34.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit",
      "id": "org.nuxeo.ecm.platform.audit",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.5.1\r\nJava-Version: 21\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.audit\r\nBundle-Category: web,stateful\r\nBundle-ActivationPolicy: lazy\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Vendor: Nuxeo\r\nNuxeo-Component: OSGI-INF/audit-bulk-contrib.xml,OSGI-INF/audit-contrib.\r\n xml,OSGI-INF/audit-pageprovider-contrib.xml,OSGI-INF/audit-scroll-contr\r\n ib.xml,OSGI-INF/audit-service.xml,OSGI-INF/audit-stream-contrib.xml,OSG\r\n I-INF/nxaudit-service.xml,OSGI-INF/core-type-contrib.xml,OSGI-INF/direc\r\n tories-contrib.xml,OSGI-INF/marshallers-contrib.xml,OSGI-INF/mem-audit-\r\n backend-factory-service.xml\r\n\r\n",
      "maxResolutionOrder": 629,
      "minResolutionOrder": 244,
      "packages": [],
      "requirements": [],
      "version": "2025.27.34"
    }
  ],
  "creationDate": 1793873591050,
  "key": "Nuxeo Platform-2025.27",
  "name": "Nuxeo Platform",
  "operations": [],
  "packages": [],
  "pluginSnapshots": {},
  "releaseDate": 1793873591050,
  "version": "2025.27"
}